#define _CRT_SECURE_NO_WARNINGS 1

//#include<iostream>
//#include<vector>
//
//using namespace std;
//
//typedef long long LL;
//
//const int N = 55, M = 35, INF = 1e9;
//
//int n;
//int w[N];
//vector<int> f[N][N];
//
//vector<int> add(vector<int>& a, vector<int>& b)
//{
//    vector<int> c;
//    int t = 0;
//    for (int i = 0; i < a.size() || i < b.size(); i++)
//    {
//        if (i < a.size()) t += a[i];
//        if (i < b.size()) t += b[i];
//        c.push_back(t % 10);
//        t /= 10;
//    }
//
//    if (t)
//        c.push_back(1);
//
//    return c;
//}
//
//vector<int> mul(vector<int>& a, LL b)
//{
//    vector<int> c;
//    LL t = 0;
//    for (int i = 0; i < a.size() || t; i++)
//    {
//        if (i < a.size()) t += a[i] * b;
//        c.push_back(t % 10);
//        t /= 10;
//    }
//
//    while (c.size() > 1 && c.back() == 0)
//        c.pop_back();
//    return c;
//}
//
//vector<int> change(LL a)
//{
//    vector<int> c;
//    while (a)
//    {
//        c.push_back(a % 10);
//        a /= 10;
//    }
//    return c;
//}
//
//bool cmp(vector<int>& a, vector<int>& b)
//{
//    if (a.size() < b.size()) return true;
//    else if (b.size() < a.size())    return false;
//    for (int i = a.size() - 1; i >= 0; i--)
//        if (a[i] < b[i]) return true;
//        else if (a[i] > b[i])    return false;
//    return true;
//}
//
//int main()
//{
//    cin >> n;
//    for (int i = 1; i <= n; i++)   scanf("%d", &w[i]);
//
//    for (int len = 3; len <= n; len++)
//        for (int l = 1; l + len - 1 <= n; l++)
//        {
//            int r = l + len - 1;
//            for (int k = l + 1; k < r; k++)
//            {
//                vector<int> tmp = change(w[l]);
//                tmp = mul(tmp, w[r]);
//                tmp = mul(tmp, w[k]);
//                tmp = add(tmp, f[l][k]);
//                tmp = add(tmp, f[k][r]);
//                if (f[l][r].empty() || cmp(tmp, f[l][r])) f[l][r] = tmp;
//            }
//        }
//
//    vector<int> res = f[1][n];
//    for (int i = res.size() - 1; i >= 0; i--)  printf("%d", res[i]);
//    return 0;
//}

#include<iostream>
#include<cstring>
#include<cmath>

using namespace std;

const int N = 15, M = 9;
const double INF = 1e9;

int n, m = 8;
int s[M][M];
double f[M][M][M][M][N];
double X;

double get(int x1, int y1, int x2, int y2)
{
    double sum = s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1] - X;
    return (double)sum * sum / n;
}

double dp(int x1, int y1, int x2, int y2, int k)
{
    double& v = f[x1][y1][x2][y2][k];
    if (v >= 0)  return v;
    if (k == 1)  return v = get(x1, y1, x2, y2);

    v = INF;
    for (int i = x1; i < x2; i++)
    {
        v = min(v, dp(i + 1, y1, x2, y2, k - 1) + get(x1, y1, i, y2));
        v = min(v, dp(x1, y1, i, y2, k - 1) + get(i + 1, y1, x2, y2));
    }
    for (int i = y1; i < y2; i++)
    {
        v = min(v, dp(x1, i + 1, x2, y2, k - 1) + get(x1, y1, x2, i));
        v = min(v, dp(x1, y1, x2, i, k - 1) + get(x1, i + 1, x2, y2));
    }
    return v;
}

int main()
{
    cin >> n;
    for (int i = 1; i <= m; i++)
        for (int j = 1; j <= m; j++)
        {
            cin >> s[i][j];
            s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];
        }

    memset(f, -1, sizeof f);
    X = (double)s[m][m] / n;

    printf("%.3lf", sqrt(dp(1, 1, 8, 8, n)));
    return 0;
}